// 2104.[前缀和,没太搞懂] Puck收香蕉
// https://oj.rnd.huawei.com/problems/2104/details
//经销商Puck刚刚接到了一笔买家订单，需要在今天收购总量至少为target千克的香蕉，幸运的是，
// Puck手里有一份清单，清单可用长度为n的数组nums表示，其中n表示供应商的总数量，
//第 i 个供应商能够提供 nums[i] 千克的香蕉。因为只有一天期限，为了节省时间，
// Puck需要联系一组下标连续的供应商，请帮助Puck找出符合收购需求的情况下，
//最少需要联系的供应商数量。【要求连续的供应商】如果不存在符合条件的收购方案，输出0。
//供应商个数n, 需要收target
//输入 6 7
// 2 3 1 2 4 3
//输出2 从下标为5和6的供应商处采购可满足要求。
//输入 8 11
// 1 1 1 1 1 1 1 1
//输出 0

#include <math.h>

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// [L,R]
static int BuyBanana(int target, const vector<int>& vtStore) {
  if (vtStore.size() < 1 && target > 0) {
    return 0;
  }
  int minLen = vtStore.size() + 1;
  vector<int> vtSum(vtStore.size() + 1);
  for (int i = 1; i <= vtStore.size(); i++) {
    vtSum[i] = vtSum[i - 1] + vtStore[i - 1];
  }
  //               L R         [L,R]
  //           -----           target
  // ----------                vtSum[i-1]
  // ---------------           vtSum[i-1]+target
  // -----------------         right
  for (int left = 1; left <= vtStore.size() + 1; left++) {
    auto right =
        lower_bound(vtSum.begin(), vtSum.end(), vtSum[left - 1] + target);
    if (right != vtSum.end()) {
      // printf("vtSum.left=%d,sum[left]=%d.target=%d,boud=%d\n", left,
      // vtSum[left], target, right-vtSum.begin());
      minLen = min(minLen, (int)(right - vtSum.begin()) - left + 1);
    }
  }
  return minLen <= vtStore.size() ? minLen : 0;
}

void test_bound() {  //   0  1  2  3  4  5  6  7  8  9
  vector<int> vtNum = {
      1, 1, 1, 3, 3, 3, 4, 4, 8, 9,
  };
  int n;
  n = 1;
  printf("%d 's low=%d.\n", n,
         lower_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 0  >=
  printf("%d 's up =%d.\n", n,
         upper_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 3  >
  n = 2;
  printf("%d 's low=%d.\n", n,
         lower_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 3 >=
  printf("%d 's up =%d.\n", n,
         upper_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 3 >
  n = 5;
  printf("%d 's low=%d.\n", n,
         lower_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 8
  printf("%d 's up =%d.\n", n,
         upper_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 8
  n = 8;
  printf("%d 's low=%d.\n", n,
         lower_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 8
  printf("%d 's up =%d.\n", n,
         upper_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 9
  n = 10;
  printf("%d 's low=%d.\n", n,
         lower_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 10
  printf("%d 's up =%d.\n", n,
         upper_bound(vtNum.begin(), vtNum.end(), n) - vtNum.begin());  // 10
}

void test_fill() {
  vector<int> vtNum = {
      1, 1, 1, 3, 3, 3, 4, 4, 8, 9,
  };
  std::fill(vtNum.begin(), vtNum.end(), 0);
  for (auto n : vtNum) printf("%d, ", n);
  printf("\n");
}

int main() {
  test_bound();
  test_fill();
  int num, target;
  while (cin >> num >> target) {
    vector<int> vtStore;
    for (int i = 0; i < num; i++) {
      int tmp;
      cin >> tmp;
      vtStore.push_back(tmp);
    }
    int nCount = BuyBanana(target, vtStore);
    printf("%d\n", nCount);
  }
  return 0;
}
